package ALBasicServer.ALProcess;

/******************
 * 单个流程的控制对象，在本流程处理的时候会创建一个新的流程控制对象
 * 并将创建的新对象带入到设置的处理过程中，由处理过程进行过程控制
 * 当创建的新对象处理完成之后将调用child done，并在本流程进行结束处理
 * 
 * ALActionProcess 单个流程的处理，这个处理会自动创建一个新的ALProcess带入，只要完成这个Process即可让流程继续
 * @author mj
 *
 */
public class ALActionProcess extends _AALProcess
{
    /// <summary>
    /// 创建一个多过程过程对象
    /// </summary>
    /// <returns></returns>
    public static ALActionProcess CreateFuncProcess(_IALProcessSubProcess _process, String _processTag)
    {
        ALActionProcess process = new ALActionProcess(_processTag);
        process._setProcess(_process);

        return process;
    }

    /// <summary>
    /// 执行的函数
    /// </summary>
    private _IALProcessSubProcess _m_fFunc;

    protected ALActionProcess(String _processTag)
    {
    	super(_processTag);
    	
        _m_fFunc = null;
    }

    /// <summary>
    /// 设置执行过程
    /// </summary>
    /// <param name="_process"></param>
    /// <returns></returns>
    public void _setProcess(_IALProcessSubProcess _process)
    {
        _m_fFunc = _process;
    }

    /// <summary>
    /// 获取出来可以在监控对象外围补充输出的信息
    /// </summary>
    @Override
    protected String _processMonitorExInfo()
    {
        return "";
    }

    /// <summary>
    /// 进行处理
    /// </summary>
    @Override
    protected void _dealProcess(_IALProcessMonitor _monitor)
    {
        //无数据则直接完成
        if(null != _m_fFunc)
        {
            ALProcess process = ALProcess.CreateProcess("sub-"+processTag());
            //设置本对象为此父节点
            process.setParentProcess(this);
            //设置步骤的监控对象
            process.setMonitor(_monitor);

            //开始执行
            _m_fFunc.deal(process);
        }
        else
        {
            _onProcessDone();
        }
    }

    /// <summary>
    /// 当子处理对象完成时的处理
    /// </summary>
    @Override
    protected void _onChildDone()
    {
        _onProcessDone();
    }

    /// <summary>
    /// 重置处理
    /// </summary>
    @Override
    protected void _onDiscard()
    {
        _m_fFunc = null;
    }

    /// <summary>
    /// 完成的处理，需要放回缓存池
    /// </summary>
    @Override
    protected void _onDone()
    {
    }
}
